/**
 * Created by Yu Jin Xian on 2016/9/5.
 */
function typeofOperators() {
    var message = 'some string';
    alert(typeof message);              // "string"
    alert(typeof(message));             // "string"
    alert(typeof 95);                   // "number"
}

function undefinedTypes() {
    var message;
    alert(message == undefined);        // true

    function or() {
        var message = undefined;
        alert(message == undefined);    // true
    }

    function error() {
        var message;
        // 下面这个变量并没有声明
        // var age
        alert(message);                 // "undefined"
        alert(age);                     // 产生错误
    }

    function typeofAge() {
        var message;
        // 下面这个变量并没有声明
        // var age
        alert(typeof message);          // "undefined"
        alert(typeof age);              // "undefined"
    }
}

function nullTypes() {
    var car = null;
    alert(typeof car);                  // "object"

    function initNull() {
        var call = null;
        if (car != null) {
            // 对 car 对象执行某些操作
        }
        alert(null == undefined);       // true
    }
}

function booleanTypes() {
    var found = true;
    var lost = false;

    var message = 'Hello world!';
    var messageAsBoolean = Boolean(message);

    function booleanString() {
        var message = 'Hello world!';
        if (message) {
            alert('Value is true');
        }
    }
}

function numberTypes() {
    function integer() {
        var inNum = 55;                 // 整数
    }

    function octal() {
        var octalNum1 = 070;            // 八进制的56
        var octalNum2 = 079;            // 无效的八进制数值——解析为 79
        var octalNum3 = 08;             // 无效的八进制数值——解析为 8
    }

    function hex() {
        var hexNum1 = 0xA;              // 十六进制的 10
        var hexNum2 = 0x1f;             // 十六进制的 31
    }

    function float() {
        var floatNum1 = 1.1;
        var floatNum2 = 0.1;
        var floatNum3 = .1;             // 有效，但不推荐
    }

    function float2() {
        var floatNum1 = 1.;             // 小数点后面没有数字——解析为 1
        var floatNum2 = 10.0;           // 整数——解析为10
    }

    function floatExp() {
        var floatNum = 3.125e7;         // 等于 31250000
        var a = .1, b = .2;
        if (a + b == .3) {              // 不要做这样的测试!
            alert('You got 0.3.');
        }
    }

    function numberRange() {
        var result = Number.MAX_VALUE + Number.MAX_VALUE;
        alert(isFinite(result));        // false
    }

    function naN() {
        alert(NaN == NaN);              // false
        alert(isNaN(NaN));              // true
        alert(isNaN(10));               // false (10 是一个数值)
        alert(isNaN('10'));             // false (可以被转成数值 10)
        alert(isNaN('blue'));           // true (不能转换成数值)
        alert(isNaN(true));             // false (可以被转换成数值 1)
    }

    function numberConver() {
        var num1 = Number('Hello world!');    // Nan
        var num2 = Number('');          // 0
        var num3 = Number('000011');    // 11
        var num4 = Number(true);        // 1
    }

    function parseInt1() {
        var num1 = parseInt('1234blue');// 1234
        var num2 = parseInt('');        // NaN
        var num3 = parseInt('0xA');     // 10 (十进制)
        var num4 = parseInt(22.5);      // 22
        var num5 = parseInt('070');     // 56 (八进制) ECMAScript 3 认为是 56, ECMAScript 5 认为是 70
        var num6 = parseInt('70');      // 70 (十进制)
        var num7 = parseInt('0xf');     // 15 (十六进制)
    }

    function parseInt2() {
        var num = parseInt('0xAF', 16); // 175
        var num1 = parseInt('AF', 16);  // 175
        var num2 = parseInt('AF');      // NaN
    }

    function parseInt3() {
        var num1 = parseInt('10', 2);   // (按二进制解析)
        var num2 = parseInt('10', 8);   // (按八进制解析)
        var num3 = parseInt('10', 10);  // (按十进制解析)
        var num4 = parseInt('10', 16);  // (按十六进制解析)
    }

    function parseFloat1() {
        var num1 = parseFloat('123blue');   // 1234 (整数)
        var num2 = parseFloat('0xA');       // 0
        var num3 = parseFloat('22.5');      // 22.5
        var num4 = parseFloat('22.34.5');   // 22.34
        var num5 = parseFloat('0908.5');    // 908.5
        var num6 = parseFloat('3.125e7');   // 31250000
    }
}

function stringTypes() {
    var firstName = "Nicholas";
    var lastName = 'Zakas';
    // var firstName = 'Nicholas"; 语法错误 (左右引号必须匹配)

    function literals() {
        var text = 'This is the letter sigma: \u03a3.';
        alert(text.length);
    }

    function feature() {
        var lang = "Java";
        lang = lang + 'Script';
    }

    function toString1() {
        var age = 11;
        var ageAsString = age.toString();       // 字符串 "11"
        var found = true;
        var foundAsString = found.toString();   // 字符串 "true"
    }

    function toString2() {
        var num = 10;
        alert(num.toString());          // "10"
        alert(num.toString(2));         // "1010"
        alert(num.toString(8));         // "12"
        alert(num.toString(10));        // "10"
        alert(num.toString(16));        // "a"
    }

    function toString3() {
        var value1 = 10;
        var value2 = true;
        var value3 = null;
        var value4;

        alert(String(value1));          // "10"
        alert(String(value2));          // "true"
        alert(String(value3));          // "null"
        alert(String(value4));          // "undefined"
    }
}

function objectTypes() {
    var o = new Object();
    var o = new Object;
}